package com.ada.spark.action

import org.apache.spark.{SparkConf, SparkContext}

/**
  * 作用：aggregate函数将每个分区里面的元素通过seqOp和初始值进行聚合，然后用combine函数将每个分区的结果和初始值(zeroValue)进行combine操作。这个函数最终返回的类型不需要和RDD中元素类型一致。
  */
object Demo7_aggregate {
    def main(args: Array[String]): Unit = {
        //创建SparkConf
        val conf = new SparkConf().setAppName("Demo7_aggregate").setMaster("local[*]")
        //创建Spark上下文对象
        val sc = new SparkContext(conf)

        var rdd1 = sc.makeRDD(1 to 10, 2)

        //aggregate函数将每个分区里面的元素通过seqOp和初始值进行聚合，
        // 然后用combine函数将每个分区的结果和初始值(zeroValue)进行combine操作。
        // 这个函数最终返回的类型不需要和RDD中元素类型一致
        //参数：(zeroValue: U)(seqOp: (U, T) ⇒ U, combOp: (U, U) ⇒ U)
        val result: Int = rdd1.aggregate(0)(_ + _, _ + _)

        println(result)
        //55
    }
}
